<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace utiles;

/**
 * Description of Validaciones
 *
 * @author Jorge
 */
class Validaciones {
    //put your code here

    /**
     * @description Valida si un email es valido, si el email tiene formato correcto devuelve true caso contrario false. para versiones de php 5.2 +
     * @param String $email cadena que contiene el correo que se desea validar
     * @return true or false
     */
    public static function validaEmail($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    }

    /**
     * @description valida que lo que se ingresa sea numerico
     * @param String $string cadena que desea validar
     * @return true si la cadena cotinene solo numeros sino retorna false
     */
    public static function validaDigito($string) {
        return ctype_digit($string);
    }

    /**
     * descripci�n: valida una cadena de caracteres pasada como argumento, permite 
     * personalizar la validaci�n pudi�ndose aumentar o disminuir la 
     * restricci�n de caracteres.
     * 
     * autor: cass
     * sitio: cassianinet.blogspot.com
     * last update: 11/04/2011 
     *
     * par�metro uno (obligatorio): cadena de caracteres a validar.
     * par�metro dos (opcional): atajos de las restricciones separados por punto y coma (;), 
     *  pueden ser:
     *  esp --> espacios
     *  ace --> acentos
     *  dia --> di�resis
     *  ene --> e�es
     *  gui --> guiones
     *  pun --> puntos
     *  num --> n�meros
     *  und --> underscores
     *  apo --> apostrofes
     * par�metro tres (opcional): controla la visualizaci�n de errores (true o false).
     */
    public static function validaAlfanumerico($sCadena, $restriccion = 'esp', $MostrarError = true) {
        if (empty($sCadena)) {
            if ($MostrarError) {
                die('Error: el primer parametro de ctype_alnum_plus es obligatorio.');
            } else {
                return false;
            }
        }
        if (strlen($restriccion) > 3 and strpos($restriccion, ';') === false) {
            if ($MostrarError) {
                die('Error: El segundo par�metro de ctype_alnum_plus solo acepta los valores 
             (esp,ace,dia,ene,gui,pun,num,und,apo) separados por punto y coma (;)');
            } else {
                return false;
            }
        }

        $sExpr = array('esp' => '\s', 'ace' => '����������', 'dia' => '����������', 'ene' => '��',
            'pun' => '\.', 'gui' => '\-', 'num' => '\d', 'und' => '_', 'apo' => '\'');
        $sPatron = '/^[a-z';
        $restriccion = strtolower($restriccion);

        if ($restriccion == 'esp') {
            $sPatron .= $sExpr['esp'];
        } else {
            $arrRestriccion = explode(';', $restriccion);

            foreach ($arrRestriccion as $name) {
                $sAtajos = array('esp', 'ace', 'dia', 'ene', 'gui', 'pun', 'num', 'und', 'apo');
                if (!in_array($name, $sAtajos)) {
                    if ($MostrarError) {
                        die('Error: El segundo par�metro de ctype_alnum_plus solo acepta los valores 
               (esp,ace,dia,ene,gui,pun,num,und,apo) separados por punto y coma (;)');
                    } else {
                        return false;
                    }
                }

                $sPatron .= $sExpr[$name];
            }
        }

        $sPatron .= ']+$/i';

        return preg_match($sPatron, $sCadena) ? true : false;
    }

    /**
     * @description comprueba que una cadena no tenga caracteres extra�os
     * @param String $str cadena que se desea limpiar
     * @return String con caracteres eliminados que supere el ASCII 127 o false si no filtro
     */
    public static function limpiaString($str) {
        return filter_var($str, FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_HIGH);
    }

    /**
     * @description funcion que limpia un string para ser insertado en base de datos de manera segura  evitando sqlinjection
     * @param String $str cadena que se desea limpiar
     * @return String cadena limpia
     */
    public static function limpiaSql($str) {
        return is_array($str) ? array_map('_clean', $str) : str_replace('\\', '\\\\', htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES));
    }

// valida_rut($r) v0.001
// No importa si el RUT esta con punto (.), comas (,),
// guion (-),k (minuscula | mayuscula) da igual.
// ----------------------------------------------------
// Autor: Juan Pablo Aqueveque <jp [arroba] juque [punto] cl >
// Script completamente gratis, eso si! m�ndame un email si lo ocupas
// o si encuentras alg�n problema :-)
//
// Temuco, 31 octubre 2002 11:48:00
    public static function valida_rut($r) {

        $r = strtoupper(ereg_replace('\.|,|-', '', $r));
        $sub_rut = substr($r, 0, strlen($r) - 1);
        $sub_dv = substr($r, -1);
        $x = 2;
        $s = 0;
        for ($i = strlen($sub_rut) - 1; $i >= 0; $i--) {
            if ($x > 7) {
                $x = 2;
            }
            $s += $sub_rut[$i] * $x;
            $x++;
        }
        $dv = 11 - ($s % 11);
        if ($dv == 10) {
            $dv = 'K';
        }
        if ($dv == 11) {
            $dv = '0';
        }
        if ($dv == $sub_dv) {
            return true;
        } else {
            return false;
        }
    }

    /*     * *
     *
     * VALIDA FECHA EN FORMATO DIA-MES-A�O
     * @param String $fecha
     * @return bool True si la fecha es correcta False si la fecha no es correcta
     *
     */

    public static function validaFecha($fecha) {
        list($dia, $mes, $ano) = explode("-", $fecha);
        return checkdate($mes, $dia, $ano);
    }

//Valida numero entero
    public static function _is_int($str) {
        return (string) $str === (string) (int) $str;
    }

}
